package com.lw.leetcode.dp.a;

/**
 * 剑指 Offer 10- I. 斐波那契数列
 *
 * @Author liw
 * @Date 2021/9/4 21:05
 * @Version 1.0
 */
public class Fib {

    public static void main(String[] args) {
        Fib test = new Fib();
        System.out.println(Integer.toBinaryString(1000000007));
        int[] arr = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 134903163, 836311896, 971215059, 807526948, 778742000, 586268941, 365010934, 951279875, 316290802, 267570670, 583861472, 851432142, 435293607, 286725742, 722019349, 8745084, 730764433, 739509517, 470273943, 209783453, 680057396, 889840849, 569898238, 459739080, 29637311, 489376391, 519013702, 8390086, 527403788, 535793874, 63197655, 598991529, 662189184, 261180706, 923369890, 184550589, 107920472, 292471061, 400391533, 692862594, 93254120, 786116714, 879370834, 665487541, 544858368, 210345902, 755204270, 965550172, 720754435, 686304600, 407059028, 93363621, 500422649, 593786270, 94208912, 687995182};
        for (int i = 0; i < arr.length; i++) {
            int fib = test.fib(i);
            if (fib != arr[i]) {

                System.out.println(i + "     " + fib + "   " + arr[i]);
            }
        }
    }

    public int fib(int n) {
        long a = 1L;
        long b = 0L;
        int count = 0;
        int l = Math.min(n, 91);
        while (count < l) {
            a = a + b;
            b = a - b;
            count++;
        }
        b = (b % 1000000007);
        a = (a % 1000000007);
        while (count < n) {
            a = a + b;
            b = a - b;
            count++;
        }
        return (int) (b % 1000000007);
    }

}
